package com.googlecode.gaetwbot;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.velocity.VelocityContext;

import com.googlecode.gaetwbot.model.Setting;
import com.googlecode.gaetwbot.service.SettingService;

/**
 * PostされたTwitterへのログイン情報とメール送信用メールアドレスをDatastore（{@link Setting}）に格納する。
 * <p>ログイン情報を保存した後は{@literal redirectTo}パラメータで指定されたURLへリダイレクトする。<br />
 * {@literal redirectTo}パラメータが指定されていない場合は{@literal /timeline}へリダイレクトする。</p>
 * @author shin1ogawa
 */
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		resp.setContentType("text/html");
		resp.setCharacterEncoding("utf-8");
		VelocityContext context = new VelocityContext();
		VelocityUtil.merge(context, "/template/login.html", resp);
		resp.flushBuffer();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		String email = req.getParameter("email");
		String redirectTo = req.getParameter("redirectTo");
		if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
			// username, password, emailのいずれかが空だった場合はログイン情報を入力するformを再表示する。
			resp.setContentType("text/html");
			resp.setCharacterEncoding("utf-8");
			VelocityContext context = new VelocityContext();
			context.put("username", username);
			context.put("redirectTo", redirectTo);
			VelocityUtil.merge(context, "/template/login.html", resp);
			resp.flushBuffer();
		}
		SettingService.set("twitterUser", username);
		SettingService.set("twitterPassword", password);
		SettingService.set("mailSender", email);
		if (StringUtils.isNotEmpty(redirectTo)) {
			resp.sendRedirect(redirectTo);
		} else {
			resp.sendRedirect("timeline");
		}
	}
}
